<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>git总结 | 月藤的博客</title>
    <meta name="generator" content="VuePress 1.8.0">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/2.10.0/github-markdown.min.css">
    <meta name="description" content="简单的介绍">
    
    <link rel="preload" href="/assets/css/0.styles.a2e941e0.css" as="style"><link rel="preload" href="/assets/js/app.54ea76a2.js" as="script"><link rel="preload" href="/assets/js/2.c554ece5.js" as="script"><link rel="preload" href="/assets/js/20.aed54ab4.js" as="script"><link rel="prefetch" href="/assets/js/10.95d63e51.js"><link rel="prefetch" href="/assets/js/11.26e082be.js"><link rel="prefetch" href="/assets/js/12.1f62021c.js"><link rel="prefetch" href="/assets/js/13.9096527c.js"><link rel="prefetch" href="/assets/js/14.86142c70.js"><link rel="prefetch" href="/assets/js/15.1adeebc5.js"><link rel="prefetch" href="/assets/js/16.efcc79e4.js"><link rel="prefetch" href="/assets/js/17.74da5698.js"><link rel="prefetch" href="/assets/js/18.fd808b3a.js"><link rel="prefetch" href="/assets/js/19.8dafe26f.js"><link rel="prefetch" href="/assets/js/21.341a5670.js"><link rel="prefetch" href="/assets/js/22.ab8b375c.js"><link rel="prefetch" href="/assets/js/23.28489470.js"><link rel="prefetch" href="/assets/js/24.87aae001.js"><link rel="prefetch" href="/assets/js/25.211ca3bf.js"><link rel="prefetch" href="/assets/js/26.afa4c8f0.js"><link rel="prefetch" href="/assets/js/27.9b98f6f3.js"><link rel="prefetch" href="/assets/js/28.93298733.js"><link rel="prefetch" href="/assets/js/29.e8c038c4.js"><link rel="prefetch" href="/assets/js/3.9d562ae1.js"><link rel="prefetch" href="/assets/js/30.27939f01.js"><link rel="prefetch" href="/assets/js/31.6a9774e8.js"><link rel="prefetch" href="/assets/js/32.f698e967.js"><link rel="prefetch" href="/assets/js/33.5ba4bfb8.js"><link rel="prefetch" href="/assets/js/34.dca90861.js"><link rel="prefetch" href="/assets/js/35.768c1bb2.js"><link rel="prefetch" href="/assets/js/36.6b0a867f.js"><link rel="prefetch" href="/assets/js/37.61156e90.js"><link rel="prefetch" href="/assets/js/38.e390246c.js"><link rel="prefetch" href="/assets/js/39.0fbd0dd1.js"><link rel="prefetch" href="/assets/js/4.e18bc6a8.js"><link rel="prefetch" href="/assets/js/40.4252699c.js"><link rel="prefetch" href="/assets/js/41.2e5b5840.js"><link rel="prefetch" href="/assets/js/42.8fe886c7.js"><link rel="prefetch" href="/assets/js/43.7a4b0851.js"><link rel="prefetch" href="/assets/js/44.93c2313d.js"><link rel="prefetch" href="/assets/js/45.33dcea60.js"><link rel="prefetch" href="/assets/js/46.681fdf10.js"><link rel="prefetch" href="/assets/js/47.a842a141.js"><link rel="prefetch" href="/assets/js/48.9a03ba74.js"><link rel="prefetch" href="/assets/js/49.a50266b1.js"><link rel="prefetch" href="/assets/js/5.dc6a2d8c.js"><link rel="prefetch" href="/assets/js/50.f2a42406.js"><link rel="prefetch" href="/assets/js/51.444cc3d8.js"><link rel="prefetch" href="/assets/js/52.cf2befd8.js"><link rel="prefetch" href="/assets/js/53.fbe609f8.js"><link rel="prefetch" href="/assets/js/54.a43fb514.js"><link rel="prefetch" href="/assets/js/55.d0c11641.js"><link rel="prefetch" href="/assets/js/56.c6f114d9.js"><link rel="prefetch" href="/assets/js/57.cc386420.js"><link rel="prefetch" href="/assets/js/58.e747d0f6.js"><link rel="prefetch" href="/assets/js/6.c1fd48f0.js"><link rel="prefetch" href="/assets/js/7.32b39b92.js"><link rel="prefetch" href="/assets/js/8.e2284671.js"><link rel="prefetch" href="/assets/js/9.8def3992.js">
    <link rel="stylesheet" href="/assets/css/0.styles.a2e941e0.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">月藤的博客</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="https://ziphold.gitee.io/blog/#/" target="_blank" rel="noopener noreferrer" class="nav-link external">
  旧博客（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://rattonlzh.github.io/homepage/homepage.html" target="_blank" rel="noopener noreferrer" class="nav-link external">
  常用网址导航（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Select language" class="dropdown-title"><span class="title">Languages</span> <span class="arrow down"></span></button> <button type="button" aria-label="Select language" class="mobile-dropdown-title"><span class="title">Languages</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/知识点总结/git总结.html" class="nav-link">
  zh-CN
</a></li><li class="dropdown-item"><!----> <a href="/en/" class="nav-link">
  en-US
</a></li></ul></div></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><div class="avatar"><img src="/assets/img/avatar.2b77755b.png" alt srcset></div> <div style="z-index: 999"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="298" height="52" src="//music.163.com/outchain/player?type=2&id=28283137&auto=1&height=32"></iframe></div> <nav class="nav-links"><div class="nav-item"><a href="https://ziphold.gitee.io/blog/#/" target="_blank" rel="noopener noreferrer" class="nav-link external">
  旧博客（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://rattonlzh.github.io/homepage/homepage.html" target="_blank" rel="noopener noreferrer" class="nav-link external">
  常用网址导航（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Select language" class="dropdown-title"><span class="title">Languages</span> <span class="arrow down"></span></button> <button type="button" aria-label="Select language" class="mobile-dropdown-title"><span class="title">Languages</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/知识点总结/git总结.html" class="nav-link">
  zh-CN
</a></li><li class="dropdown-item"><!----> <a href="/en/" class="nav-link">
  en-US
</a></li></ul></div></div> <!----></nav>  <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>随便说说</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>知识点总结</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/知识点总结/git总结.html" class="active sidebar-link">git总结</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_1-配置全局用户名和邮箱" class="sidebar-link">1. 配置全局用户名和邮箱</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_2-初始化仓库" class="sidebar-link">2. 初始化仓库</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_3-添加远程仓库" class="sidebar-link">3. 添加远程仓库</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_4-克隆仓库" class="sidebar-link">4. 克隆仓库</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_5-添加提交" class="sidebar-link">5. 添加提交</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_6-关联远程分支" class="sidebar-link">6. 关联远程分支</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_7-从远程分支拉取内容" class="sidebar-link">7. 从远程分支拉取内容</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_8-推送到远程分支" class="sidebar-link">8. 推送到远程分支</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_9-推送远程分支失败的原因" class="sidebar-link">9. 推送远程分支失败的原因</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_10-创建本地新分支" class="sidebar-link">10. 创建本地新分支</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_11-删除本地分支" class="sidebar-link">11. 删除本地分支</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_12-创建新远程分支" class="sidebar-link">12. 创建新远程分支</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_13-删除远程分支" class="sidebar-link">13. 删除远程分支</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_14-版本回溯" class="sidebar-link">14. 版本回溯</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_15-臭名昭著的强制推送" class="sidebar-link">15. 臭名昭著的强制推送</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_16-git协作方法" class="sidebar-link">16.git协作方法</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_17-git合并冲突" class="sidebar-link">17.git合并冲突</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#_18-重命名分支" class="sidebar-link">18.重命名分支</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#命名规范" class="sidebar-link">命名规范</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#git-rebase-git-merge-git-merge-no-ff" class="sidebar-link">git rebase, git merge, git merge --no-ff</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#git-commit-amend" class="sidebar-link">git commit --amend</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#stash" class="sidebar-link">stash</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#revert" class="sidebar-link">revert</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#git-bisect" class="sidebar-link">git bisect</a></li><li class="sidebar-sub-header"><a href="/知识点总结/git总结.html#开发流程" class="sidebar-link">开发流程</a></li></ul></li><li><a href="/知识点总结/java单元测试总结.html" class="sidebar-link">java测试</a></li><li><a href="/知识点总结/jquery总结.html" class="sidebar-link">jquery初探</a></li><li><a href="/知识点总结/js总结.html" class="sidebar-link">js易错点</a></li><li><a href="/知识点总结/kotlin语法总结.html" class="sidebar-link">kotlin语法入门</a></li><li><a href="/知识点总结/latex总结.html" class="sidebar-link">latex常用代码</a></li><li><a href="/知识点总结/PS总结.html" class="sidebar-link">PS总结</a></li><li><a href="/知识点总结/springboot总结.html" class="sidebar-link">springboot进行web开发总结</a></li><li><a href="/知识点总结/thinkphp总结.html" class="sidebar-link">thinkphp入坑</a></li><li><a href="/知识点总结/uml软件建模总结.html" class="sidebar-link">uml软件建模总结</a></li><li><a href="/知识点总结/人工智能总结.html" class="sidebar-link">人工智能总结</a></li><li><a href="/知识点总结/大数据软件工程总结.html" class="sidebar-link">大数据软件工程总结</a></li><li><a href="/知识点总结/常用快捷键总结.html" class="sidebar-link">第一篇博客</a></li><li><a href="/知识点总结/数字图像处理总结.html" class="sidebar-link">数字图像处理知识点</a></li><li><a href="/知识点总结/数据库应用理论总结.html" class="sidebar-link">数据库应用复习</a></li><li><a href="/知识点总结/数据库系统概念总结.html" class="sidebar-link">数据库系统概念总结</a></li><li><a href="/知识点总结/数据挖掘总结.html" class="sidebar-link">数据挖掘总结</a></li><li><a href="/知识点总结/设计模式总结.html" class="sidebar-link">设计模式</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>考研专区</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>读书笔记</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>开发资料</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>配置记录</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>思维导图</span> <span class="arrow right"></span></p> <!----></section></li><li><a href="/friend_link.html" class="sidebar-link">友情链接</a></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="git总结"><a href="#git总结" class="header-anchor">#</a> git总结</h1> <h2 id="_1-配置全局用户名和邮箱"><a href="#_1-配置全局用户名和邮箱" class="header-anchor">#</a> 1. 配置全局用户名和邮箱</h2> <p>配置全局用户名：	<code>git config --global user.name &quot;yourname&quot;</code></p> <p>配置邮箱：<code>git config --global user.email &quot;youremail@xx.com&quot;</code></p> <p>配置完全局用户名和邮箱后，在git仓库进行提交后，在版本日志上可以显示提交者的用户名和邮箱名，建议用户名和邮箱名与github上的账号一致。</p> <h2 id="_2-初始化仓库"><a href="#_2-初始化仓库" class="header-anchor">#</a> 2. 初始化仓库</h2> <p>在项目文件夹下初始化仓库：<code>git init</code></p> <h2 id="_3-添加远程仓库"><a href="#_3-添加远程仓库" class="header-anchor">#</a> 3. 添加远程仓库</h2> <p>建立仓库大多数是为了更好地与他人协作，所以应该有一个远程仓库，大家都把提交推送到远程仓库或从远程仓库拉取新变更。</p> <p>添加远程仓库origin：<code>git remote add origin &lt;repo-url&gt;</code>.</p> <p>请将 <code>&lt;repo-url&gt;</code>替换为远程仓库的url地址。</p> <p>origin是默认的名字，可以换成其他有意义的名字。</p> <p>在github的仓库页面，有个名为<kbd>Clone or download</kbd>的按钮，点击可以看到仓库的url（此url不是该仓库页面的url），复制下来，假设为 <code>https://github.com/rattonlzh/rattonlzh.github.io.git</code>，添加远程仓库并命名为github的命令：<code>git remote add github https://github.com/rattonlzh/rattonlzh.github.io.git</code>。下文提到的github都代指使用git新添加的远程仓库。</p> <h2 id="_4-克隆仓库"><a href="#_4-克隆仓库" class="header-anchor">#</a> 4. 克隆仓库</h2> <p>在当前文件夹下克隆远程仓库到本地：<code>git clone &lt;repo-url&gt;</code></p> <p>该操作相当于<code>git init</code>+  <code>git remote add origin &lt;repo-url&gt;</code> + <code>git branch set-upstream-to=origin/master</code> + <code>git pull</code>.</p> <h2 id="_5-添加提交"><a href="#_5-添加提交" class="header-anchor">#</a> 5. 添加提交</h2> <p>将所有变更添加到暂存区:<code>git add .</code></p> <p>将暂存区的变更提交到本地仓库并编写提交注释：<code>git commit -m “提交信息”</code></p> <p>一步到位，直接将变更提交：<code>git add . &amp; git commit -m “提交信息”</code></p> <p>一般来说，做了变更就将变更添加到暂存区，当暂存区的变更足够多时，再考虑提交，因为每次提交都是记录在版本历史中的，为了版本历史的每次提交都是有意义的，应该尽量避免只是修改了几个单词等鸡肋的提交。</p> <h2 id="_6-关联远程分支"><a href="#_6-关联远程分支" class="header-anchor">#</a> 6. 关联远程分支</h2> <p>设置本地master分支的上游分支为github的master分支的命令：<code>git branch –-set-upstream-to=github/master master</code></p> <h2 id="_7-从远程分支拉取内容"><a href="#_7-从远程分支拉取内容" class="header-anchor">#</a> 7. 从远程分支拉取内容</h2> <p>假设添加了远程仓库并命名为github，拉取github的master分支内容合并到本地仓库当前分支的命令：<code>git pull github master</code></p> <p>如果设置了上游分支，可以直接使用 <code>git pull</code>命令从上游分支拉取内容。</p> <h2 id="_8-推送到远程分支"><a href="#_8-推送到远程分支" class="header-anchor">#</a> 8. 推送到远程分支</h2> <p>推送本地的local分支到远程仓库github的master分支的命令：<code>git push github local:master</code></p> <p>如果设置了上游分支，可以直接使用 <code>git push</code>命令。</p> <p>第一次push时指定上游分支为github的master分支（该分支必须是已存在）的命令： <code>git push -u github master</code></p> <h2 id="_9-推送远程分支失败的原因"><a href="#_9-推送远程分支失败的原因" class="header-anchor">#</a> 9. 推送远程分支失败的原因</h2> <ol><li>没有该远程仓库的写权限，需要通知该仓库的拥有者分配写权限</li> <li>本地的版本历史落后于远程仓库的版本历史，这是在协作时你的同伴推送了新内容到远程仓库上而你没有及时同步导致的。此时在push前先 <code>git pull</code>一下就可以了。</li> <li>网络连接有问题</li></ol> <h2 id="_10-创建本地新分支"><a href="#_10-创建本地新分支" class="header-anchor">#</a> 10. 创建本地新分支</h2> <p>创建dev分支并切换到dev分支： <code>git checkout -b dev</code></p> <p>重新切换到master分支： <code>git checkout master</code></p> <p>查看本地分支： <code>git branch</code>. *前缀表示该分支为正在使用的分支</p> <p>查看所有分支（包括远程分支和HEAD指向的分支）： <code>git branch -a</code></p> <h2 id="_11-删除本地分支"><a href="#_11-删除本地分支" class="header-anchor">#</a> 11. 删除本地分支</h2> <p>删除dev分支：<code>git branch -d dev</code></p> <h2 id="_12-创建新远程分支"><a href="#_12-创建新远程分支" class="header-anchor">#</a> 12. 创建新远程分支</h2> <p>新建本地分支newbranch并推送到远程仓库的newbranch分支上，远程仓库如果没有该分支，则会新建一个： <code>git push github newbranch:newbranch</code></p> <h2 id="_13-删除远程分支"><a href="#_13-删除远程分支" class="header-anchor">#</a> 13. 删除远程分支</h2> <p>当临时创建的分支合并到master分支后，就没有存在的价值了，则对其删除。</p> <p>删除远程github仓库的dev分支的命令：<code>git push github --delete dev</code>或 <code>git push github :dev</code></p> <h2 id="_14-版本回溯"><a href="#_14-版本回溯" class="header-anchor">#</a> 14. 版本回溯</h2> <p>查看提交历史： <code>git log</code></p> <p>回退到最近的提交版本： <code>git reset HEAD .</code></p> <p>回退到上一次提交版本：<code>git reset ^HEAD</code></p> <p>回退到指定版本：</p> <ul><li>查看版本历史：<code>git log</code></li> <li>每个提交都有一个SHA值作为其唯一标识，回退到指定版本：<code>git checkout &lt;sha值&gt;</code>(只需SHA值可唯一标识该提交的前几位即可)</li></ul> <p>撤销暂存区的修改（回退到上一个 <code>git commit</code> 或 <code>git add</code> 前的状态）：<code>git checkout –- .</code></p> <h2 id="_15-臭名昭著的强制推送"><a href="#_15-臭名昭著的强制推送" class="header-anchor">#</a> 15. 臭名昭著的强制推送</h2> <p>非常不建议使用的命令：<code>git push -f</code></p> <p>该命令会将本地分支强制提交到远程仓库，导致远程分支的版本历史被本地的版本历史代替，也就是说如果你的同伴在远程分支上新增了内容，你没有pull下来，直接来个<code>git push -f</code>，那么远程分支上你的同伴做的新更改就消失了，等于让别人白干，且无法撤销。</p> <h2 id="_16-git协作方法"><a href="#_16-git协作方法" class="header-anchor">#</a> 16.git协作方法</h2> <p>分支的管理原则：</p> <ul><li><p>每个开发人员创建一个分支 ，每人在各自的分支工作</p></li> <li><p>针对某个bug临时创建分支</p></li> <li><p>实验性功能临时创建一个分支</p></li> <li><p>经过测试、功能稳定的分支合并到master分支，master分支是最终的项目成果</p> <p>​</p></li></ul> <h2 id="_17-git合并冲突"><a href="#_17-git合并冲突" class="header-anchor">#</a> 17.git合并冲突</h2> <p><code>git diff</code>将文件的不同部分标记出来，手动删除冲突的代码和标记</p> <p><code>git mergetool</code></p> <h2 id="_18-重命名分支"><a href="#_18-重命名分支" class="header-anchor">#</a> 18.重命名分支</h2> <p>本地分支重命名<code>git branch -m old new</code></p> <h1 id="git工作流"><a href="#git工作流" class="header-anchor">#</a> git工作流</h1> <h2 id="命名规范"><a href="#命名规范" class="header-anchor">#</a> 命名规范</h2> <p>commit message的规范：提交内容包含本次提交的作用</p> <table><thead><tr><th>branch类型</th> <th>描述</th> <th>branch命名示例</th></tr></thead> <tbody><tr><td>feature branch</td> <td>功能分支，又称探索分支，开发某个新功能创建一个feature分支，完成功能的开发,命名格式：feat-功能描述</td> <td>feat-add-guide</td></tr> <tr><td>hotfix branch</td> <td>热修复分支，为了处理master分支中的bug而建的branch，修复完成后要合并到master和dev分支中。 命名格式：hotfix-version_id-任务描述</td> <td>hotfix-1.0.0-quickfind</td></tr> <tr><td>dev branch</td> <td>开发分支，也是git工作流中最新的工作分支，feature branch都要从dev拉取最新信息，最终也要合并到dev branch</td> <td></td></tr> <tr><td>release分支</td> <td>预发行分支，从dev分支拉取，相当于dev的某个时间的快照，进行测试和试用，对应一个版本，是一个临时分支，测试通过后合并到master分支上,命名格式：release-版本号</td> <td>release-1.23</td></tr> <tr><td>master</td> <td>稳定分支，从release分支拉取，只接受合并，不接受任何提交，合并需要给节点打上版本号</td> <td></td></tr></tbody></table> <h2 id="git-rebase-git-merge-git-merge-no-ff"><a href="#git-rebase-git-merge-git-merge-no-ff" class="header-anchor">#</a> git rebase, git merge, git merge --no-ff</h2> <p>三者都可以将一个分支的内容合并到另一个分支上.但在处理上有些区别.</p> <div class="language- extra-class"><pre class="language-text"><code>git checkout master
git rebase dev
</code></pre></div><p>rebase 将dev分支的所有结点拼接到分叉结点之后</p> <p>merge默认是fast forward模式,要求dev分支是master的上游分支,此时只需将master分支的HEAD指针指向dev分支的HEAD处</p> <p>merge --no-ff:将maste分支和dev分支的最新内容合并形成新的commit结点,master分支尾部和dev分支尾部都接上向新的结点,master指针的head指向新的结点</p> <p><img src="/assets/img/1581255523847.7a8a8815.png" alt="1581255523847"></p> <h2 id="git-commit-amend"><a href="#git-commit-amend" class="header-anchor">#</a> git commit --amend</h2> <p>提交的修改会覆盖最近的提交</p> <h2 id="stash"><a href="#stash" class="header-anchor">#</a> stash</h2> <p>git stash将当前暂存区的内容入栈保存起来,通过git stash pop恢复</p> <h2 id="revert"><a href="#revert" class="header-anchor">#</a> revert</h2> <p>反做,和reset都能撤销commit,但不会删除被撤销结点后面的提交结点</p> <h2 id="git-bisect"><a href="#git-bisect" class="header-anchor">#</a> git bisect</h2> <p>通过二分查找的方式定位bug结点.</p> <div class="language-shell extra-class"><pre class="language-shell"><code><span class="token comment">#将当前结点标记为good结点</span>
<span class="token function">git</span> bisect good
<span class="token comment">#将当前结点标记为bad结点</span>
<span class="token function">git</span> bisect bad
<span class="token comment">#HEAD指向good和bad之间的中间结点</span>
<span class="token function">git</span> bisect start
<span class="token comment">#回到start之间的状态</span>
<span class="token function">git</span> bisect reset
</code></pre></div><p><img src="/assets/img/1581257500779.efa54983.png" alt="1581257500779"></p> <h2 id="开发流程"><a href="#开发流程" class="header-anchor">#</a> 开发流程</h2> <p><img src="/assets/img/git-flow.a0803bd0.png" alt="git工作流"></p> <p>图片来源(https://juejin.im/post/5b4328bbf265da0fa21a6820)</p> <p>在远程服务器创建中心的git仓库</p> <p>从中心仓库克隆代码</p> <div class="language-shell extra-class"><pre class="language-shell"><code><span class="token function">git</span> clone <span class="token operator">&lt;</span>repo-url<span class="token operator">&gt;</span>
</code></pre></div><p>创建并转到dev分支</p> <div class="language-shell extra-class"><pre class="language-shell"><code><span class="token function">git</span> chekout -b dev
</code></pre></div><p>添加初始内容,提交</p> <div class="language- extra-class"><pre class="language-text"><code>git add . &amp; git commit -m &quot;初始的项目代码&quot;
git push
</code></pre></div><p>创建feature分支,每人负责一个分支,</p> <div class="language- extra-class"><pre class="language-text"><code>git chekout dev
git pull origin dev
git checkout -b &lt;branch-name&gt;
git push origin &lt;branch-name&gt;
</code></pre></div><p>进行功能的开发,每日提交完成的内容</p> <div class="language- extra-class"><pre class="language-text"><code>git add . &amp; git commit -m &quot;提交内容描述&quot;
</code></pre></div><p>结束本日的工作前把本地分支推送到远程分支,推送前先更新dev分支,将最新内容合并到自己负责的分支上,如果分支合并出现冲突,需要解决冲突</p> <div class="language- extra-class"><pre class="language-text"><code>git checkout dev
git pull origin dev
git checkout &lt;branch-name&gt;
git rebase dev
git push
</code></pre></div><p>自己的负责的功能已开发完成,可以合并到dev分支了,合并前保证dev分支是最新的</p> <div class="language- extra-class"><pre class="language-text"><code>git chekout dev
git pull
git checkout &lt;branch-name&gt;
git rebase dev
</code></pre></div><p>开始合并并提交到远程仓库</p> <div class="language- extra-class"><pre class="language-text"><code>git checkout dev
git merge --no-ff &lt;branch-name&gt;
git push
</code></pre></div><p>测试组创建release分支</p> <div class="language- extra-class"><pre class="language-text"><code>git chekout dev
git pull
git chekout -b release
git push origin release
</code></pre></div><p>定期合并dev分支</p> <div class="language- extra-class"><pre class="language-text"><code>git merge --no-ff dev

</code></pre></div><p>在该分支上进行测试.测试如果没问题则合并到master分支上,打上版本号</p> <div class="language- extra-class"><pre class="language-text"><code>git checkout master
git merge --no-ff dev
git tag &lt;version-id&gt;
</code></pre></div><p>如果存在问题,开发者在release分支上进行修复,修复后将release内容合并到master分支和dev分支,master打上版本号</p> <div class="language- extra-class"><pre class="language-text"><code>git merge --no-ff release master
git merge --no-ff release dev
git checkout master
git tag &lt;version-id&gt;
</code></pre></div><p>master分支是稳定分支,如果master的分支出现了问题,则创建hotfix分支,在hotfix分支上进行紧急修复,修复后将内容合并到dev分支和master分支</p> <div class="language- extra-class"><pre class="language-text"><code>git merge --no-ff release master
git merge --no-ff release dev
git checkout master
git tag &lt;version-id&gt;
</code></pre></div><p>commit messages的格式</p> <div class="language- extra-class"><pre class="language-text"><code>&lt;type&gt;: &lt;subject&gt;
&lt;BLANK LINE&gt;
&lt;body&gt;
&lt;BLANK LINE&gt;
&lt;footer&gt;
</code></pre></div><blockquote><ul><li><p>type: 本次 commit 的类型，诸如 bugfix docs style 等</p></li> <li><p>scope: 本次 commit 波及的范围</p></li> <li><p>subject: 简明扼要的阐述下本次 commit 的主旨，在原文中特意强调了几点 1. 使用祈使句，是不是很熟悉又陌生的一个词，来传送门在此 祈使句 2. 首字母不要大写 3. 结尾无需添加标点</p></li> <li><p>body: 同样使用祈使句，在主体内容中我们需要把本次 commit 详细的描述一下，比如此次变更的动机，如需换行，则使用 |</p></li> <li><p>footer: 描述下与之关联的 issue 或 break change，详见案例</p></li></ul> <hr> <p>作者：VincentSea
链接：https://juejin.im/post/5b4328bbf265da0fa21a6820
来源：掘金
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处</p></blockquote> <p><strong>Type的类别说明：</strong></p> <blockquote><ul><li><p>feat: 添加新特性</p></li> <li><p>fix: 修复bug</p></li> <li><p>docs: 仅仅修改了文档</p></li> <li><p>style: 仅仅修改了空格、格式缩进、都好等等，不改变代码逻辑</p></li> <li><p>refactor: 代码重构，没有加新功能或者修复bug</p></li> <li><p>perf: 增加代码进行性能测试</p></li> <li><p>test: 增加测试用例</p></li> <li><p>chore: 改变构建流程、或者增加依赖库、工具等</p></li></ul> <hr> <p>作者：VincentSea
链接：https://juejin.im/post/5b4328bbf265da0fa21a6820
来源：掘金
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处</p></blockquote> <h1 id="vscode处理git冲突"><a href="#vscode处理git冲突" class="header-anchor">#</a> vscode处理git冲突</h1> <p>一般本地仓库和远程仓库的在相同位置内容不同时，合并远程分支（git pull）就会出现conflict， 就会生成</p> <div class="language- extra-class"><pre class="language-text"><code>&lt;&lt;&lt;&lt;HEAD
你的内容
========
远程仓库的内容
&gt;&gt;&gt;&gt;&gt;&gt;冲突提交的SHA值
</code></pre></div><p><img src="/assets/img/image-20200628203951747.800e9e2d.png" alt="image-20200628203951747"></p> <p>合并分支出现冲突时， 文本冲突的内容会在对应位置同时显示并以不同颜色高亮，你可以手动选择采用哪个更改</p></div> <footer class="page-edit"><!----> <!----> <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh"><img alt="知识共享许可协议" src="" style="border-width:0"></a><br>本作品采用<a rel="license" href="http://creativecommons.org/licenses/by/4.0/">知识共享署名 4.0 国际许可协议</a>进行许可。

   
</footer> <div class="page-nav"><p class="inner"><span class="prev">
      ←
      <a href="/随便说说/学习新编程语言的关注点.html" class="prev">
        学习新编程语言的关注点
      </a></span> <span class="next"><a href="/知识点总结/java单元测试总结.html">
        java测试
      </a>
      →
    </span></p></div>  <footer style="text-align:center;"><a href="https://beian.miit.gov.cn">
    粤ICP备2021020303号</a></footer></main></div><div class="global-ui"><!----></div></div>
    <script src="/assets/js/app.54ea76a2.js" defer></script><script src="/assets/js/2.c554ece5.js" defer></script><script src="/assets/js/20.aed54ab4.js" defer></script>
  </body>
</html>
